"""
步进电机数学换算
"""
import math

def test():
    print(__name__)


if __name__ == '__main__':
    test()

class StepperMotorMath:
    """
    步进电机数学换算

    换算步进电机参数
    """
    @staticmethod
    def ang_2_rad(ang:float)->float:
        """
        角度转化为弧度

        Parameters
        ----------
        ang : float,角度        

        Returns
        -------
        rad : float,弧度
        """
        ang:float = 2*math.pi*ang/360
        return ang

    @staticmethod
    def rad_2_ang(rad:float)->float:
        """
        弧度转化为角度

        Parameters
        ----------
        rad : float,弧度    

        Returns
        -------
        ang : float,角度
        """
        ang:float = 360*rad/(2*math.pi)
        return ang
    
    @staticmethod   
    def rpm_2_rps(rpm:float)->float:
        """
        rpm(转每分钟)转化为rps(弧度每秒)

        Parameters
        ----------
        rpm : float,转每分钟    

        Returns
        -------
        rps : float,弧度每秒
        """
        rps:float = rpm*2*math.pi/60
        return rps

    @staticmethod      
    def rps_2_rpm(rps:float)->float:
        """
        rps(弧度每秒)转化为rpm(转每分钟)

        Parameters
        ----------
        rps : float,弧度每秒    

        Returns
        -------
        rpm : float,转每分钟
        """
        rpm:float = 60*rps/(2*math.pi)
        return rpm
 
    @staticmethod     
    def rpm_2_cn(rpm:float, freq:int, spr:int)->int:
        """
        rpm(转每分钟)转化为定时器计数值

        Parameters
        ----------
        rpm : float,转每分钟

        freq : int,定时器频率  

        spr : int,步进电机一圈步数(细分步)
        
        Returns
        -------
        cn : int,定时器计数值
        """
        cn:int = 60*freq/(spr*rpm)
        return cn
 
    @staticmethod     
    def rps_2_cn(rps:float, freq:int, spr:int)->int:
        """
        RPS(弧度每秒)转化为定时器计数值

        Parameters
        ----------
        rps : float,弧度每秒

        freq : int,定时器频率  

        spr : int,步进电机一圈步数(细分步)
        
        Returns
        -------
        cn : int,定时器计数值
        """
        cn:int = 2*math.pi*freq/(spr*rps)
        return cn

    @staticmethod      
    def cn_2_rpm(cn:int, freq:int, spr:int)->float:
        """
        定时器计数值转化为rpm(圈每分钟)

        Parameters
        ----------
        cn : int,定时器计数值

        freq : int,定时器频率  

        spr : int,步进电机一圈步数(细分步)
        
        Returns
        -------
        rpm : float,转每分钟
        """
        rpm:float = 60*freq/(spr*cn)
        return rpm
 
    @staticmethod         
    def cn_2_rps(cn:int, freq:int, spr:int)->float:
        """
        定时器计数值转化为rps(弧度每秒)

        Parameters
        ----------
        cn : int,定时器计数值

        freq : int,定时器频率  

        spr : int,步进电机一圈步数(细分步)
        
        Returns
        -------
        rps : float,弧度每秒
        """
        rps:float = 2*math.pi*freq/(spr*cn)
        return rps;
